full screen background image

CURSO SOBRE BIOHERRAMIENTAS EN BIOESTADISTICA Y BIOINFORMATICA
(1ªEdición)

Barcelona, 16, 17 y 18 de Mayo 2017

Cómo crear aplicaciones con Shiny

Parte I: Introducción

¿Qué es Shiny?


  • Shiny es un package de R para crear aplicaciones interactivas en base web.

  • Ha sido elaborado por los creadores de RStudio. (Joe Chen)

  • No requiere conocimientos de ningún lenguaje de programación de páginas web (HTML, JavaScript, PHP,…), sólo usa código R.

  • Con poco código se pueden crear aplicaciones muy flexibles y potentes.

  • És útil para hacer que tus funciones o paquetes lo utilicen usuarios no familiarizados con R y que prefieran “cliquear”.

  • Hacer que tus paquetes escritos originalmente en R sean mucho más “populares”.

  • En su página web hay ejemplos y un extenso manual.

Website de Shiny

Ejemplos

Interfaces gráficas de packages

Cómo usarlo: (1) En local


Pasos

  1. Se escribe la parte UI en un archivo llamado “ui.R” y la parte Server en un archivo llamado “server.R”. Ambos archivos se tienen que llamar así y tienen que estar en la misma carpeta.

  2. Se carga el package shiny.

  3. Se ejecuta la función runApp().

Alternativa

Guardar el código de la parte UI y el de la parte Server en dos objetos (ui y server) y llamar a la función runApp(list(ui, server)) ó la función shinyApp(ui, server)

Requisitos:

Hay que tener instalado R y Shiny y los packages necesarios actualizados en el PC ó Mac.

Cómo usarlo: (II) en un servidor remoto

EN UN SERVIDOR PROPIO

  • Ventajas

    • Accesible desde cualquier dispositivo que tenga navegador.
    • No hace falta R ni Shiny ni otros paquetes.
  • Requisitos

    • R y Shiny y otros posibles paquetes instalados en el servidor.
    • Instalar los programas necesarios. Más info aquí.
    • El sistema operativo del servidor tiene que ser Linux.

EN EL SERVIDOR DE SHINY

  • Ventajas

    • Es muy simple: sólo hay que instalar shinyapps y registrarse en www.shinyapps.io/.
    • Accesible desde cualquier dispositivo que tenga navegador.
    • Shiny server ofrece unas estadísticas del uso de la app.
  • Inconvenientes

    • El servicio es gratuito hasta un máximo de horas y número de usuarios.

Extensiones de Shiny


Paquetes disponibles en CRAN para mejorar el aspecto y funcionalidad de la aplicación.

Los que usaremos en el curso son:

  • shinyBS: para crear popups, modales, etc. Visita su página web aquí

  • shinyjs: para crear toggles, etc. Visita su página web aquí

  • shinythemes: par cambiar el estilo. Visita su página web aquí


shinythemes

shinythemes


shinyBS

shinyBS

Más ejemplos

¿Cómo funciona?
Caso práctico

INPUTS

  • file: Fichero (fileInput).

  • datatype: Tipo de datos (radioButtons).

  • Si los datos son de tipo texto:

    • header: ¿Contiene cabecera? (checkboxInput).
    • sep: Caracter spearador de columnas (radioButtons).
    • dechar: Tipo de datos (radioButtons).

OUTPUTS

  • summary: Descriptivas de las variables (verbatimTextOutput).

  • dataTable: Muestra la tabla de datos (dataTableOutput).

Fichero “ui.R”

fluidPage(    

  titlePanel("Lectura datos"),

  sidebarLayout(      

    sidebarPanel(
      fileInput("file", ""),
      radioButtons("datatype", "Data format", c("SPSS"=1, "TEXT"=2),1),
      conditionalPanel(
        condition="input.datatype==2",
        wellPanel(
          h5("TEXT Options:"),
          checkboxInput("header", "Has column headers", TRUE),
          radioButtons("sep", "Column Separator", c(Comma=",", Semicolon=";", Tab="\t")), 
          radioButtons("dechar", "Decimal character", c(Comma=",", Dot="."), "Dot")
        )
      )
    ),

    mainPanel(
      tabsetPanel(type = "tabs", 
        tabPanel("Summary", verbatimTextOutput("summary")), 
        tabPanel("Table", dataTableOutput("dataTable"))
      )
    )
  )

)

Fichero “server.R”

function(input, output) {

  dataset<-reactive({
    inFile<-input$file
    if (input$datatype==2){
      dataset<- read.table(inFile$datapath,header=input$header,
                sep=input$sep,quote=input$quote,dec=input$dechar)
    } else {
      dataset<-spss.get(inFile$datapath)
    }
    return(dataset)
  })

  output$dataTable <- renderDataTable({
    dataset()
  })    

  output$summary <- renderPrint({
    summary(dataset())
  })   

}